module jinji.util.i18n;

import etc.c.curl : CurlError;

extern (C):

/// 获取翻译
inout(char)[] _(inout(char)[] s) @safe nothrow @nogc {
    return s;
}

/// 获取错误信息
string getErrorMsg(CurlError code) {
	switch (code) with (CurlError) {
	case unsupported_protocol:
		return "不支持的协议";

	case url_malformat:
		return "网址格式不正确";

	case couldnt_resolve_proxy:
		return "无法解析代理服务器。指定的代理服务器主机无法解析";

	case couldnt_resolve_host:
		return "无法解析主机。指定的远程主机无法解析";

	case couldnt_connect:
		return "无法通过 connect() 连接至主机或代理服务器";

	case remote_access_denied:
		return "访问远程资源被拒绝";

	case partial_file:
		return "文件传输尺寸小于或大于预期";

	case quote_error:
		return "在向远程服务器发送自定义 “QUOTE” 命令时，其中一个命令返回的错误代码为 400 或更大的数字（对于 FTP），或以其他方式表明命令无法成功完成";

	case http_returned_error:
		return "如果 CURLOPT_FAILONERROR 设置为 TRUE，且 HTTP 服务器返回 >= 400 的错误代码，就会返回此代码";

	case write_error:
		return "在向本地文件写入所收到的数据时发生错误，或由写入回调 (write callback) 向 libcurl 返回了一个错误";

	case upload_failed:
		return "无法开始上传";

	case read_error:
		return "读取本地文件时遇到问题，或由读取回调 (read callback) 返回了一个错误";

	case out_of_memory:
		return "内存不足";

	case operation_timedout:
		return "curl 操作超时";

	case range_error:
		return "服务器不支持或不接受范围请求";

	case ssl_connect_error:
		return "同时使用 SSL/TLS 时可能会发生此错误。您可以访问错误缓冲区查看相应信息，其中会对此问题进行更详细的介绍。可能是证书（文件格式、路径、许可）、密码及其他因素导致了此问题";

	case file_couldnt_read_file:
		return "无法打开 FILE:// 路径下的文件。原因很可能是文件路径无法识别现有文件。建议您检查文件的访问权限";

	case ldap_cannot_bind:
		return "LDAP 无法绑定。LDAP 绑定操作失败";

	case ldap_search_failed:
		return "LDAP 搜索无法进行";

	case function_not_found:
		return "找不到函数";

	case aborted_by_callback:
		return "由回调中止。回调向 libcurl 返回了 “abort”";
		debug (Curl) {
	case failed_init:
			return "非常早期的初始化代码失败";
	case unknown_option:
			return "无法识别设置的选项";
	case http_post_error:
			return "此问题比较少见，主要由内部混乱引发";
	case bad_function_argument:
			return "使用了不正确的参数调用函数";
		}
	case interface_failed:
		return "界面错误。指定的外部界面无法使用。请通过 CURLOPT_INTERFACE 设置要使用哪个界面来处理外部连接的来源 IP 地址";

	case too_many_redirects:
		return "重定向过多";

	case telnet_option_syntax:
		return "telnet 选项字符串的格式不正确";

	case peer_failed_verification:
		return "远程服务器的 SSL 证书校验失败";

	case got_nothing:
		return "服务器未返回任何数据";

	case ssl_engine_notfound:
		return "找不到指定的加密引擎";

	case ssl_engine_setfailed:
		return "无法将选定的 SSL 加密引擎设为默认选项";

	case send_error:
		return "无法发送网络数据";

	case recv_error:
		return "接收网络数据失败";

	case ssl_certproblem:
		return "本地客户端证书有问题";

	case ssl_cipher:
		return "无法使用指定的密钥";

	case ssl_cacert:
		return "无法使用已知的 CA 证书验证对等证书";

	case bad_content_encoding:
		return "无法识别传输编码";

	case ldap_invalid_url:
		return "LDAP 网址无效";

	case filesize_exceeded:
		return "超过了文件大小上限";

	case use_ssl_failed:
		return "请求使用 SSL 失败";

	case send_fail_rewind:
		return "进行发送操作时，curl 必须回转数据以便重新传输，但回转操作未能成功";

	case ssl_engine_initfailed:
		return "SSL 引擎初始化失败";

	case login_denied:
		return "远程服务器拒绝登录";

	case remote_disk_full:
		return "服务器磁盘空间不足";

	case remote_file_exists:
		return "文件已存在，无法覆盖";

	case conv_failed:
		return "字符转换失败";

	case conv_reqd:
		return "调用方必须注册转换回调";

	case ssl_cacert_badfile:
		return "读取 SSL CA 证书时遇到问题";

	case remote_file_not_found:
		return "网址中引用的资源不存在";

	case ssh:
		return "SSH 会话中发生无法识别的错误";

	case ssl_shutdown_failed:
		return "无法终止 SSL 连接";

	default:
	}
	return "未知的 curl 错误";
}
